package com.core.ingenium.model;

import java.io.Serializable;

import java.math.BigDecimal;

import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;


@Entity
@NamedQueries( { @NamedQuery(name = "Seccion.findAll", query = "select o from Seccion o") })
@Table(name = "\"seccion\"")
public class Seccion implements Serializable {
    @Column(name = "cronometro")
    private boolean cronometro;
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name = "id", nullable = false)
    private int id;
    @Column(name = "instruccion")
    private String instruccion;
    @Column(name = "maxPreguntas")
    private int maxPreguntas;
    @Column(name = "nombre")
    private String nombre;
    @Column(name = "peso")
    private BigDecimal peso;
    @Column(name = "posicion")
    private int posicion;
    @Column(name = "tiempo")
    private int tiempo;
    @OneToMany(mappedBy = "anterior")
    private List<Seccion> lstAnteriores;
    @OneToMany(mappedBy = "seccionEjemplo")
    private List<Pregunta> lstEjemplos;
    @OneToMany(mappedBy = "seccion")
    private List<ResultadoSeccion> lstResultadoSeccion;
    @OneToMany(mappedBy = "siguiente")
    private List<Seccion> lstSiguientes;
    @OneToMany(mappedBy = "seccionPregunta")
    private List<Pregunta> lstPreguntas;

    @ManyToOne
    @JoinColumn(name = "anterior")
    private Seccion anterior;

    @ManyToOne
    @JoinColumn(name = "siguiente")
    private Seccion siguiente;

    @ManyToOne
    @JoinColumn( name = "plantilla")
    private Plantilla plantilla;
    public Seccion() {
    }

    public Seccion(Seccion anterior, boolean cronometro, int id, String instruccion, int maxPreguntas, String nombre,
                   BigDecimal peso, Plantilla plantilla, int posicion, Seccion siguiente, int tiempo) {
        this.anterior = anterior;
        this.cronometro = cronometro;
        this.id = id;
        this.instruccion = instruccion;
        this.maxPreguntas = maxPreguntas;
        this.nombre = nombre;
        this.peso = peso;
        this.plantilla = plantilla;
        this.posicion = posicion;
        this.siguiente = siguiente;
        this.tiempo = tiempo;
    }


    public boolean getCronometro() {
        return cronometro;
    }

    public void setCronometro(boolean cronometro) {
        this.cronometro = cronometro;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getInstruccion() {
        return instruccion;
    }

    public void setInstruccion(String instruccion) {
        this.instruccion = instruccion;
    }

    public int getMaxPreguntas() {
        return maxPreguntas;
    }

    public void setMaxPreguntas(int maxPreguntas) {
        this.maxPreguntas = maxPreguntas;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public BigDecimal getPeso() {
        return peso;
    }

    public void setPeso(BigDecimal peso) {
        this.peso = peso;
    }


    public int getPosicion() {
        return posicion;
    }

    public void setPosicion(int posicion) {
        this.posicion = posicion;
    }


    public int getTiempo() {
        return tiempo;
    }

    public void setTiempo(int tiempo) {
        this.tiempo = tiempo;
    }

    public void setAnterior(Seccion anterior) {
        this.anterior = anterior;
    }

    public List<Seccion> getLstAnteriores() {
        return lstAnteriores;
    }

    public void setLstAnteriores(List<Seccion> lstAnteriores) {
        this.lstAnteriores = lstAnteriores;
    }

    public Seccion addSeccion(Seccion seccion) {
        getLstAnteriores().add(seccion);
        seccion.setAnterior(this);
        return seccion;
    }

    public Seccion removeSeccion(Seccion seccion) {
        getLstAnteriores().remove(seccion);
        seccion.setAnterior(null);
        return seccion;
    }

    public List<Pregunta> getLstEjemplos() {
        return lstEjemplos;
    }

    public void setLstEjemplos(List<Pregunta> lstEjemplos) {
        this.lstEjemplos = lstEjemplos;
    }

    public Pregunta addPregunta(Pregunta pregunta) {
        getLstEjemplos().add(pregunta);
        pregunta.setSeccionEjemplo(this);
        return pregunta;
    }

    public Pregunta removePregunta(Pregunta pregunta) {
        getLstEjemplos().remove(pregunta);
        pregunta.setSeccionEjemplo(null);
        return pregunta;
    }

    public List<ResultadoSeccion> getLstResultadoSeccion() {
        return lstResultadoSeccion;
    }

    public void setLstResultadoSeccion(List<ResultadoSeccion> lstResultadoSeccion) {
        this.lstResultadoSeccion = lstResultadoSeccion;
    }

    public ResultadoSeccion addResultadoSeccion(ResultadoSeccion resultadoSeccion) {
        getLstResultadoSeccion().add(resultadoSeccion);
        resultadoSeccion.setSeccion(this);
        return resultadoSeccion;
    }

    public ResultadoSeccion removeResultadoSeccion(ResultadoSeccion resultadoSeccion) {
        getLstResultadoSeccion().remove(resultadoSeccion);
        resultadoSeccion.setSeccion(null);
        return resultadoSeccion;
    }

    public void setSiguiente(Seccion siguiente) {
        this.siguiente = siguiente;
    }

    public List<Seccion> getLstSiguientes() {
        return lstSiguientes;
    }

    public void setLstSiguientes(List<Seccion> lstSiguientes) {
        this.lstSiguientes = lstSiguientes;
    }

    public List<Pregunta> getLstPreguntas() {
        return lstPreguntas;
    }

    public void setLstPreguntas(List<Pregunta> lstPreguntas) {
        this.lstPreguntas = lstPreguntas;
    }

    public void setPlantilla(Plantilla plantilla) {
        this.plantilla = plantilla;
    }

    public Seccion getAnterior() {
        return anterior;
    }

    public Seccion getSiguiente() {
        return siguiente;
    }

    public Plantilla getPlantilla() {
        return plantilla;
    }
}
